package com.sh.domain.demo.dao;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.sh.common.base.BaseDao;
import com.sh.domain.demo.dto.DemoPageDto;
import com.sh.domain.demo.entity.DemoEntity;

/**
 * 
 * NOTE： DemoDao
 *
 * @author： king
 * @date： 2019年4月2日
 *
 */
@Repository
@Transactional(rollbackFor=Exception.class)
public class DemoDao extends BaseDao<DemoEntity, String> {

	/**
	 * 
	 * NOTE： 分页查询
	 *
	 * @author： king
	 * @date： 2019年4月2日
	 * 
	 * @param demoDto
	 * @param start
	 * @param rows
	 * @return
	 */
	public List<DemoEntity> findDemoByPage(DemoPageDto demoDto, Integer start, Integer rows) {
		
		StringBuilder sql = new StringBuilder("select * from demo where id is not null ");
		
		List<Object> params = new ArrayList<>();
		
		if(StringUtils.isNotEmpty(demoDto.getName())) {
			sql.append(" and name like ?");
			params.add("%"+ demoDto.getName() +"%");
		}
		if(demoDto.getBirthdayStart() != null) {
			
			sql.append(" and date_format(birthday, '%y%m%d') >= ?");
			params.add(demoDto.getBirthdayStart());
		}
		if(demoDto.getBirthdayEnd() != null) {
			
			sql.append(" and date_format(birthday, '%y%m%d') <= ?");
			params.add(demoDto.getBirthdayEnd());
		}
		
		List<DemoEntity> list = this.findByPage(sql.toString(), params, start, rows);
		
		return list;
	}
	
	/**
	 * 
	 * NOTE： 查询总行数
	 *
	 * @author： king
	 * @date： 2019年4月2日
	 * 
	 * @param demoDto
	 * @return
	 */
	public Long findDemoCount(DemoPageDto demoDto) {
		
		StringBuilder sql = new StringBuilder("select count(1) from demo where id is not null ");
		
		List<Object> params = new ArrayList<>();
		
		if(StringUtils.isNotEmpty(demoDto.getName())) {
			sql.append(" and name like ?");
			params.add("%"+ demoDto.getName() +"%");
		}
		if(demoDto.getBirthdayStart() != null) {
			
			sql.append(" and date_format(birthday, '%y%m%d') >= ?");
			params.add(demoDto.getBirthdayStart());
		}
		if(demoDto.getBirthdayEnd() != null) {
			
			sql.append(" and date_format(birthday, '%y%m%d') <= ?");
			params.add(demoDto.getBirthdayEnd());
		}
		
		BigInteger total = (BigInteger) this.findSingleResult(sql.toString(), params);
		
		return total.longValue();
	}
	
	/**
	 * 
	 * NOTE： 条件查询
	 *
	 * @author： king
	 * @date： 2019年4月2日
	 * 
	 * @param demoDto
	 * @return
	 */
	public List<DemoEntity> findDemoList(DemoPageDto demoDto) {
		
		StringBuilder sql = new StringBuilder("select * from demo where id is not null ");
		
		List<Object> params = new ArrayList<>();
		
		if(StringUtils.isNotEmpty(demoDto.getName())) {
			sql.append(" and name like ?");
			params.add("%"+ demoDto.getName() +"%");
		}
		if(demoDto.getBirthdayStart() != null) {
			
			sql.append(" and date_format(birthday, '%y%m%d') >= ?");
			params.add(demoDto.getBirthdayStart());
		}
		if(demoDto.getBirthdayEnd() != null) {
			
			sql.append(" and date_format(birthday, '%y%m%d') <= ?");
			params.add(demoDto.getBirthdayEnd());
		}
		
		List<DemoEntity> list = this.find(sql.toString(), params);
		
		return list;
	}
	
	/**
	 * 
	 * NOTE： 通过id查询
	 *
	 * @author： king
	 * @date： 2019年4月2日
	 * 
	 * @param id
	 * @return
	 */
	public DemoEntity getDemoById(String id) {
		
		String sql = "select * from demo where id = ?";
		
		DemoEntity demoEntity = this.getById(sql, id);
		
		return demoEntity;
	}
}
